import pandas as pd

def read_file():
    filepath = "../datas/beijing_tianqi/beijing_tianqi_2018.csv"
    df = pd.read_csv(filepath)
    df['bWendu'] = df['bWendu'].str.replace("℃","").astype("int32")
    df['yWendu'] = df['yWendu'].str.replace("℃","").astype("int32")
    ''':cvar
    怎样进行复杂组合条件对数据查询：
    方式1. 使用df[(df["a"] > 3) & (df["b"]<5)]的方式；
    方式2. 使用df.query("a>3 & b<5")的方式；
    方法2的语法更加简洁
    性能对比：
    当数据量小时，方法1更快；
    当数据量大时，因为方法2直接用C语言实现，节省 方法1临时数组的多次复制，方法2更快；
    '''
    # 方法一
    condition = (df['bWendu'] < 5) & (df['yWendu'] > -10)
    print(df[condition].head(10))
    print("--------------------------------------------------------------------------------")

    # 方法二
    ''':cvar
    2、使用df.query可以简化查询
        形式：DataFrame.query(expr, inplace=False, **kwargs)
        其中expr为要返回boolean结果的字符串表达式
        形如：
        df.query('a<100')
        df.query('a < b & b < c')，或者df.query('(a<b)&(b<c)')
        df.query可支持的表达式语法：
        逻辑操作符: &, |, ~
        比较操作符: <, <=, ==, !=, >=, >
        单变量操作符: -
        多变量操作符: +, -, *, /, %
        df.query中可以使用@var的方式传入外部变量
        df.query支持的语法来自NumExpr，地址：
    '''
    print(df.query("bWendu < 5 & yWendu > -10").head(10))

    print("---------------------------------------------------------------------------------")
    # 查询温差大于15度的日子
    print(df.query('bWendu - yWendu > 10').head())
    # print(df)

    # 可以使用外部的变量
    # 查询温度在这两个温度之间的数据
    high_temperature = 15
    low_temperature = -10
    print("--------------------------------------------------------------------------------")
    # print(df.query("yWendu<=@high_temperature & yWendu>=@low_temperature").head())
    print(df.query("bWendu <@high_temperature & yWendu > @low_temperature").head(10))














if __name__ == '__main__':
    read_file()